package algorithm.niuke;

import java.util.Arrays;

public class F最高的广告牌 {
    /*
     * 你正在安装一个广告牌，并希望它高度最大。这块广告牌将有两个钢制支架，两边各一个。每个钢支架的高度必须相等。
     * 
     * 你有一堆可以焊接在一起的钢筋 rods。举个例子，如果钢筋的长度为 1、2 和 3，则可以将它们焊接在一起形成长度为 6 的支架。
     * 
     * 返回广告牌的最大可能安装高度。如果没法安装广告牌，请返回 0。
     * 
     * 
     * 
     * 示例 1：
     * 
     * 输入：[1,2,3,6] 输出：6 解释：我们有两个不相交的子集 {1,2,3} 和 {6}，它们具有相同的和 sum = 6。 示例 2：
     * 
     * 输入：[1,2,3,4,5,6] 输出：10 解释：我们有两个不相交的子集 {2,3,5} 和 {4,6}，它们具有相同的和 sum = 10。
     * 示例 3：
     * 
     * 输入：[1,2] 输出：0 解释：没法安装广告牌，所以返回 0。
     * 
     * 
     * 提示：
     * 
     * 0 <= rods.length <= 20 1 <= rods[i] <= 1000 钢筋的长度总和最多为 5000
     */
    public int tallestBillboard(int[] rods) {
        // 选取的2部分子集和一定是偶数
        // 如果某个钢筋比剩余钢筋和还大，去掉它
        Arrays.sort(rods);
        int sum = 0;
        for (int i = 0; i < sum; i++) {
            sum += rods[i];
        }
        rods = clean(rods, rods.length - 1, sum);
        if (rods.length < 2) {
            return 0;
        }
        
        return 0;
    }

    int[] clean(int[] rods, int end, int sum) {
        if (end == 0) {
            return new int[0];
        }
        if (rods[end] > (sum - rods[end])) {
            return clean(rods, end - 1, sum - rods[end]);
        }
        return Arrays.copyOf(rods, end + 1);
    }
}
